package muhnes.sizoo.dal;

import java.util.List;
import muhnes.sizoo.HibernateUtilZoologia;
import muhnes.sizoo.modelo.Recolector;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 * Clase que implementa los metodos definidos en RecolectorDao
 * @author Ricardo Orellana
 */
public class RecolectorDaoImpl extends GenericoDAO< Recolector, Integer >   
                               implements RecolectorDao{

    public RecolectorDaoImpl() {
        super( HibernateUtilZoologia.getSessionFactory() );
    }

    @Override
    protected Class<?> getClaseEntidad () {
        return Recolector.class;
    }
    
    /**
     * Metodo que devuelve una lista de recolecciones que se encuentren habilitadas
     * 
     */
    @Override
    public List< Recolector > buscarHabilitados () {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Recolector where habilitado = 'true' ";
        Query consulta = sesion.createQuery( hql );
        List< Recolector > entidades = consulta.list();
        return entidades;
    }

    /**
     * Método que verifica que las recolecciones no se repitan
     *  
     */
    @Override
    public boolean verificarUnicidad(Recolector entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Recolector where codigorecolector != :codigo and "
                + "upper(nombre) = :nombre"
                + " and upper(alias) = :alias";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigorecolector());
        consulta.setParameter("nombre", entidad.getNombre().toUpperCase());
        consulta.setParameter("alias", entidad.getAlias().toUpperCase());
        return consulta.uniqueResult() != null ? true : false;
    }

     /**
     * Método que verifica que la entidad sea independiente de otras entidades.
     *  
     */
    @Override
    public boolean verificarDependencia (Recolector entidad) {
        Session sesion = fabricaSesion.getCurrentSession();        
        String hql = "from Recoleccion where recolector.codigorecolector = :codigo";
        Query consulta = sesion.createQuery( hql );
        consulta.setParameter("codigo",entidad.getCodigorecolector());
        return !consulta.list().isEmpty();
    }
  
}
